package us.proyecto.canarios.actions.concursos;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelectionIndex;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
import org.richfaces.component.html.HtmlTree;
import org.richfaces.event.NodeSelectedEvent;
import org.richfaces.model.TreeNode;

import us.proyecto.canarios.actions.admin.AutenticacionAction;
import us.proyecto.canarios.actions.usuarios.ConsultaUsuarioAction;
import us.proyecto.canarios.dao.ConcursoDAO;
import us.proyecto.canarios.dao.DiccionarioDAO;
import us.proyecto.canarios.dao.GruposDAO;
import us.proyecto.canarios.dao.PajarosDAO;
import us.proyecto.canarios.dao.UsuarioDAO;
import us.proyecto.canarios.domain.Asociacion;
import us.proyecto.canarios.domain.Concurso;
import us.proyecto.canarios.domain.Criador;
import us.proyecto.canarios.domain.Incidencia;
import us.proyecto.canarios.domain.Pajaro;
import us.proyecto.canarios.domain.Premio;
import us.proyecto.canarios.domain.Puntuacion;
import us.proyecto.canarios.domain.PuntuacionGrupo;
import us.proyecto.canarios.domain.Tipo;
import us.proyecto.canarios.domain.Usuario;

@Name("evaluarGrupo")
@Scope(ScopeType.SESSION)
public class EvaluarGrupoAction {

	@Logger
	Log log;

	private PuntuacionGrupo grupo;

	private List<Premio> listaPremios;

	@In(create = true)
	private DiccionarioDAO diccionariosDAO;

	@In(create = true)
	private GruposDAO gruposDAO;

	@In(create = true)
	private PajarosDAO pajarosDAO;

	private boolean consulta = false;

	@In(create  = true)
	private GestionGrupoJuezAction gestionGrupoJuez;

	@Begin(join = true, flushMode=FlushModeType.MANUAL)
	public void selectGrupo(PuntuacionGrupo pun){
		grupo = pun;
		consulta = gestionGrupoJuez.getConsulta();

		int cont = 1;
		for(Puntuacion p:grupo.getPuntuaciones()){
    		if(cont == 1){
    			grupo.setPuntuacion1(p);
    		}else if(cont == 2){
    			grupo.setPuntuacion2(p);
    		}else if(cont == 3){
    			grupo.setPuntuacion3(p);
    		}else if(cont == 4){
    			grupo.setPuntuacion4(p);
    		}
    		cont++;
    	}
		listaPremios = diccionariosDAO.getListaPremiosTipo(grupo.getPuntuacion1().getPajaro().getTipo());

	}





	public PuntuacionGrupo getGrupo() {
		return grupo;
	}

	public void setGrupo(PuntuacionGrupo grupo) {
		this.grupo = grupo;
	}

	public List<Premio> getListaPremios() {
		return listaPremios;
	}


	public void setListaPremios(List<Premio> listaPremios) {
		this.listaPremios = listaPremios;
	}

	public void guardar(){
		//pajarosDAO.update(puntuacion.getPajaro());
		gruposDAO.save(grupo);
		FacesMessages.instance().add("Evaluación guardada correctamente");
	}


	public void descalificar(){
		grupo.setPremio(null);
		if(grupo.getPuntuacion1().getDescalificado() != null && grupo.getPuntuacion1().getDescalificado()){
			grupo.setDescalificado(true);
		}else{
			if(grupo.getPuntuacion4().getDescalificado() != null && grupo.getPuntuacion4().getDescalificado()==false){
				if(grupo.getPuntuacion2().getDescalificado() != null && grupo.getPuntuacion2().getDescalificado()==false){
					if(grupo.getPuntuacion3().getDescalificado() != null && grupo.getPuntuacion3().getDescalificado()==false){
						grupo.setDescalificado(false);
					}
				}
			}
		}

	}

	public void descalificarGrupo(){
		grupo.setPremio(null);
		if(grupo.getDescalificado() != null && grupo.getDescalificado()){
			grupo.getPuntuacion1().setDescalificado(true);
			grupo.getPuntuacion2().setDescalificado(true);
			grupo.getPuntuacion3().setDescalificado(true);
			grupo.getPuntuacion4().setDescalificado(true);
		}else if(grupo.getDescalificado()==false){
			grupo.getPuntuacion1().setDescalificado(false);
			grupo.getPuntuacion2().setDescalificado(false);
			grupo.getPuntuacion3().setDescalificado(false);
			grupo.getPuntuacion4().setDescalificado(false);
		}

	}
	public void descalificar2(){
		grupo.setPremio(null);
		if(grupo.getPuntuacion2().getDescalificado() != null && grupo.getPuntuacion2().getDescalificado()){
			grupo.setDescalificado(true);
		}else{
			if(grupo.getPuntuacion1().getDescalificado() != null && grupo.getPuntuacion1().getDescalificado()==false){
				if(grupo.getPuntuacion4().getDescalificado() != null && grupo.getPuntuacion4().getDescalificado()==false){
					if(grupo.getPuntuacion3().getDescalificado() != null && grupo.getPuntuacion3().getDescalificado()==false){
						grupo.setDescalificado(false);
					}
				}
			}
		}
	}
	public void descalificar3(){
		grupo.setPremio(null);
		if(grupo.getPuntuacion3().getDescalificado() != null && grupo.getPuntuacion3().getDescalificado()){
			grupo.setDescalificado(true);
		}else{
			if(grupo.getPuntuacion1().getDescalificado() != null && grupo.getPuntuacion1().getDescalificado()==false){
				if(grupo.getPuntuacion2().getDescalificado() != null && grupo.getPuntuacion2().getDescalificado()==false){
					if(grupo.getPuntuacion4().getDescalificado() != null && grupo.getPuntuacion4().getDescalificado()==false){
						grupo.setDescalificado(false);
					}
				}
			}
		}
	}
	public void descalificar4(){
		grupo.setPremio(null);
		if(grupo.getPuntuacion4().getDescalificado() != null && grupo.getPuntuacion1().getDescalificado()){
			grupo.setDescalificado(true);
		}else{
			if(grupo.getPuntuacion1().getDescalificado() != null && grupo.getPuntuacion1().getDescalificado()==false){
				if(grupo.getPuntuacion2().getDescalificado() != null && grupo.getPuntuacion2().getDescalificado()==false){
					if(grupo.getPuntuacion3().getDescalificado() != null && grupo.getPuntuacion3().getDescalificado()==false){
						grupo.setDescalificado(false);
					}
				}
			}
		}
	}





	public boolean isConsulta() {
		return consulta;
	}





	public void setConsulta(boolean consulta) {
		this.consulta = consulta;
	}

	public void vacio(){}
}
